High end storage controllers, such as the International Business Machines Corporation (IBM®) Enterprise Storage Server® manage Input/Output (I/O) requests from networked hosts to one or more storage units, such as a direct access storage device (DASD), Redundant Array of Independent Disks (RAID Array), and Just a Bunch of Disks (JBOD). Storage controllers include one or more host bus adapters or interfaces to communicate with one or more hosts over a network and adapters or interfaces to communicate with the storage units. A storage controller also includes one or more “clusters”, each of which includes a cache memory and often a non-volatile storage device (NVS). In a Fast Write operation, the storage controller receives write requests from the host device and writes data updates to the cache of one cluster and subsequently transfers the updates to the NVS of a second cluster. The NVS is used to provide an extra copy of the data update in the event that the copy of the update in cache is lost as a result of a system failure. The storage controller returns a “write complete” message to the host which initiated the update request upon completing the write to both the cache and NVS, but before the data is actually written to the storage unit. The modified cached data of each cluster is subsequently destaged to a target storage unit. Once destaged to disk, the updated copy in the cache and NVS may be removed.
When an initial microcode load (IML) of a storage control unit is performed, the overall sizes of the NVS of both clusters are determined (the storage control unit will be described herein in terms of two clusters although a storage control unit may include only one cluster or more than two clusters). A portion of each NVS is allocated to buffers, the size of which is typically a predetermined amount or proportion of the total NVS available. Thus, an NVS may have, for example, a 1 MB buffer for each 256 MB of NVS memory. Similarly, buffers are allocated out of the usable cache as a local, volatile copy of the NVS buffers. After the NVS and cache buffers are allocated and the IML is completed, the remaining NVS and cache spaces are used for customer data and no further buffer allocation may occur.
When it is desired to change the size of NVS and/or cache memory space of a cluster, a failback-to-service operation is commenced in which the cluster to be updated is removed from service and the controller operated in a single-cluster mode with the other cluster running. NVS and cache may be added or removed from the first cluster which then undergoes an IML and is brought back into service through a failback-to-dual operation. During the single cluster IML, the new sizes of the NVS and cache are recognized. However, the other cluster is not able to accommodate the new sizes because its IML has been completed. One solution is to allocate the maximum size possible for the buffers in both clusters. Such a solution results in wasted space and is unacceptably expensive and inefficient.
Consequently, a need remains for the ability to efficiently and economically allocate NVS and cache buffers in a storage control unit.